package cn.yunsenlin.formula.cloud.interfaces;

import cn.yunsenlin.formula.cloud.bean.auth.Template;
import cn.yunsenlin.formula.cloud.bean.template.TemplateShareParams;
import cn.yunsenlin.formula.cloud.mysql.bean.generator.TbTemplate;

import java.util.List;

/**
 * 公式服务
 */
public interface TemplateService {
    /**
     * 创建公式
     *
     * @param template 公式信息
     * @param userId   用户ID
     * @return 创建的公式
     */
    Template createTemplate(Template template, int userId);
    /**
     * 创建临时公式
     *
     * @param template 公式信息
     * @return 创建的公式
     */
    Template createTempTemplate(Template template);

    /**
     * 更新公式基本信息
     *
     * @param baseInfo 公式的基本信息
     * @return 更新后的公式
     */
    Template updateTemplateBaseInfo(TbTemplate baseInfo);

    /**
     * 分享公式/关闭分享
     *
     * @param templateId 公式ID
     * @param params     分享参数
     * @return 分享后的公式信息
     */
    Template shareTemplate(int templateId, TemplateShareParams params);

    /**
     * 删除公式
     *
     * @param id 公式ID
     */
    void removeTemplate(int id);

    /**
     * 当前公式是否还在使用中
     *
     * @param id 公式ID
     * @return 是否在使用中
     */
    boolean templateIsUsing(int id);

    /**
     * 公式名是否重复
     *
     * @param name   公式名
     * @param userId 用户ID
     * @return 是否重复
     */
    boolean templateNameIsRepeat(String name, int userId);

    /**
     * 通过用户ID查询公式列表
     *
     * @param userId 用户ID
     * @return 公式列表
     */
    List<TbTemplate> selectByUserId(int userId);

    /**
     * 通过ID查询公式
     *
     * @param id 公式ID
     * @return 公式信息
     */
    Template selectById(int id);

    /**
     * 查询一个计算组中包含的计算组
     *
     * @param groupId 计算组ID
     * @return 公式列表
     */
    List<Template> selectTemplateByGroupId(Integer groupId);

    /**
     * 获取公式的使用量
     * @param templateId 公式ID
     * @return 使用量
     */
    Integer getAmount(int templateId);
}
